Computer systems conventionally employ data structures for managing information about directory objects, such as files and sub-directories. In one arrangement, a different data structure is provided for each directory of a computer's file system. The file system manages the data structures and stores information about objects in different directories. Information about each directory object is provided in a respective “directory entry.” Each directory entry includes the name of a directory object (e.g., its file name) and an “inode” number, which uniquely identifies the object in the file system.
In one prior arrangement, names of directory objects are hashed, and the hash values form indices for accessing hints to directory entries on disk. The hints are kept in volatile memory (e.g., RAM) within “hash buckets,” i.e., structures for storing information over respective ranges of hash values. Depending on implementation, a large number of hash buckets may be provided, each covering a unique range of hash values for storing various hints. Given a directory object name, the file system can look up the hint for that name by hashing the name and jumping to the hash bucket whose range includes the computed hash value. The file system can then find the hint in the hash bucket and scan the disk location designated by the hint for the directory entry on disk.
In some arrangements, multiple client devices can connect to a computing system to access its directory objects, e.g., over a network. In some cases, the client devices operate with different network protocols that impose different file naming conventions. For example, some client devices use the NFS protocol, which employs a Unix file naming convention, whereas others use Microsoft Windows CIFS, which employs long file names (i.e., up to 256 characters, or “M256”). Also, some client devices use Microsoft DOS short file names (i.e., up to eight characters, followed by a single “.” and a 3-character extension, or “M83”). Given these different naming conventions, any given directory object can have up to three different names, one for each protocol. Prior implementations support multiple protocols for a directory object by providing a different hint for each protocol, where all such hints point to the same directory entry on disk.